<?php
defined('ACCESS_ZYG') or exit('access invalid');
class AdminInitial{
    public static function run(){
        self::setChar();
        self::setError();
        self::setConst();
        self::setConf();
        self::setAutoLoad();
        self::setSess();
        self::setUrlPath();
        self::setAuth();
        self::setDispach();
    }
    //告诉浏览器用什么字符集显示
    private static function setChar(){
        header('content-type:text/html;charset=utf-8');
    }
    //开发过程中显示所有错误
    private static function setError(){
        ini_set('display_errors',1);
        error_reporting(E_ALL);
    }
    //设置一些常量，用于保存路径，在后面的脚本中用到路径时可以方便调用
    private static function setConst(){
        define('DS','/');
        define('SITE_ROOT',str_replace('\\','/',dirname(__DIR__)));//绝对路径，网站根目录
        define('CONF_DIR',SITE_ROOT.DS.'Conf');
        define('ADMIN_DIR',SITE_ROOT.DS.'Admin');
        define('CONTROL_DIR',ADMIN_DIR.DS.'Control');
        define('TPLS_DIR',ADMIN_DIR.DS.'Tpls');
        define('TEMPLATES_DIR',ADMIN_DIR.DS.'Templates');
        //加载常量文件
        include_once CONF_DIR.DS."const.php";
    }

    private static function setConf(){
        //配置文件返回数组，并保存在$GLOBALS全局变量中
        $GLOBALS['config'] = include_once CONF_DIR.DS."config.php";
    }
    private static function loadCore($class){
        if(is_file(CORE_DIR.DS."$class.class.php")) {
            include_once(CORE_DIR.DS."$class.class.php");
        }
    }
    private static function loadControl($class){
        if(is_file(CONTROL_DIR.DS."$class.class.php")) {
            include_once(CONTROL_DIR.DS."$class.class.php");
        }
    }
    private static function loadModel($class){
        if(is_file(MODEL_DIR.DS."$class.class.php")) {
            include_once(MODEL_DIR.DS."$class.class.php");
        }
    }
    //自动加载,当实例化对象或是用类静态方法，用到哪个类文件，就加载哪个
    private static function setAutoLoad(){
        spl_autoload_register(array('AdminInitial','loadControl'));
        spl_autoload_register(array('AdminInitial','loadCore'));
        spl_autoload_register(array('AdminInitial','loadModel'));

    }
    private static function setSess(){

        $session_save_dir = SESSION_SAVE_DIR;
        if(!is_dir($session_save_dir)){
            mkdir($session_save_dir,0777,true);
        }
        //规定session保存路径
        ini_set('session.save_path',$session_save_dir);
        session_start();
    }

    //路由解析，接收到请求的参数，来确定控制器和方法
    private static function setUrlPath(){
        $act= isset($_REQUEST['act'])?$_REQUEST['act']:'login';
        $op = isset($_REQUEST['op'])?$_REQUEST['op']:'index';
        define('ACTION',$act);
        define('OPTION',$op);
    }
    //后台除了登陆前的页面功能，登陆后的页面都是要进行权限验证的，即没有登陆不能直接访问
    private static function setAuth(){
        if(ACTION=='login'&& (OPTION=='index' || OPTION=='captcha')){
                return ;
        }
        if(!isset($_SESSION['is_login'])){
            if($_COOKIE['login_escape']){
                $admin_id = $_COOKIE['login_escape'];
                $admin_obj = new adminModel();
                $admin_row= $admin_obj->getAdminById($admin_id);
                if($admin_row){
                    //echo 'have ...';exit;
                    $_SESSION['is_login'] = 1;
                    $_SESSION['admin_info'] = $admin_row;
                    $admin_obj->updateInfo($admin_id);
                }else{
                   // echo 'have no...';
                    header("Location:index.php?act=login");
                }
            }
            header("Location:index.php?act=login");
        }
    }
    //由控制器和方法参数来分发,然后分配到控制器的方法
    private static function setDispach(){
        $contorl = ACTION.'Action';
        $option = OPTION.'Op';
        $obj = new $contorl();
        $obj->$option();
    }
}